package MultiPong;

import java.io.*;
import java.net.*;

public class BalThread extends Thread{
	String xpos_thread = "400"; //startpositie van het balletje mag door server worden meegegeven (begin nieuw spel bv)
	String ypos_thread = "400";
	int dir_x=-1;
	int dir_y=1;
	int xpos_1;
	int xpos_2;
	int xpos_3;
	int xpos_4;
	int snelheid;
	int afw_x=1;
	int afw_y=1;
	boolean player1_mis=false; // meegeven met de server hiermee worden de levens berekend van de players
	boolean player2_mis=false;
	Server server;
	boolean spelen=true;
	
	
	public BalThread(Server server) {
	this.server = server;	
	}
	
	public void run() {
	System.out.println("test");
	int x = Integer.parseInt(xpos_thread)+10;
	int y = Integer.parseInt(ypos_thread)+10;
	snelheid = 10;
	while (spelen){
		xpos_1=server.getxpos_1();
		xpos_2=server.getxpos_2();
		xpos_2=xpos_1; // FOUT IN PROGRAMMA opgelost in versie 2 van het programma 
		slaap(1);
		if ((dir_x==1) & (dir_y==-1)){
			y=y-afw_y;
			x=x+afw_x;
			if(((x<(xpos_1-50))||(x>(xpos_1+50)))&((y<10)&(y>=5))){ // player 1 mist de bal   
				System.out.println("Player 1 mist de bal");	
				player1_mis=true;
			}
			if (((x>(xpos_1))&(x<(xpos_1+50)))&((y>10)&(y<20))){ // player 1 raakt de bal linkerhelft
				if (((x>(xpos_1))&(x<(xpos_1+20)))&((y>10)&(y<10))){ //kaats op uiteinde verhooght snelheid   
					snelheid = 5;
					System.out.println("linkerbok snelheid= "+snelheid);
				}
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				dir_x=-1; 
				dir_y=1;
			}
			if (((x>(xpos_1+50))&(x<(xpos_1+100)))&((y>10)&(y<20))){ // player 1 raakt de bal rechterhelft 
				if (((x>(xpos_1+80))&(x<(xpos_1+100)))&((y>10)&(y<10))){ //kaats op uiteinde verhooght snelheid
					snelheid = 10;
					System.out.println("snelheid= "+snelheid);
				}
				dir_x=1; 
				dir_y=1;
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				}
			if((x>750)&(x<780)){
			dir_x=-1;
			dir_y=-1;
			afw_x=(int) (2* Math.random()+1);
			afw_y=(int) (2* Math.random()+1);
			}
		}
		
		
		
		if ((dir_x==1) & (dir_y==1)){ //Bal beweegt van linksboven naar rechtsonder
			y=y+afw_y;
			x=x+afw_x;
			if(((x<(xpos_2-50))||(x>(xpos_2+50)))&((y<780)&(y>=775))){ //Player 1 mist de bal  
				System.out.println("Player 2 mist de bal");	
				player2_mis=true;	
			}
			if (((x>(xpos_2))&(x<(xpos_2+50)))&((y>760)&(y<780))){ //Player 1 raakt de bal op de linkerkant
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				dir_x=-1; 
				dir_y=-1;
				if (((x>(xpos_2))&(x<(xpos_2+20)))&((y>10)&(y<10))){ //Snelheid verhoogt bij kaats op uiteinde
					snelheid = 5;
					System.out.println("snelheid= "+snelheid);
				}
			}
			if (((x>(xpos_2+50))&(x<(xpos_2+100)))&((y>760)&(y<780))){ //Player 1 raakt de bal op de rechterkant
				if (((x>(xpos_1+80))&(x<(xpos_2+100)))&((y>760)&(y<780))){ //Snelheid verhoogt bij kaats op uiteinde
					snelheid = 5;
					System.out.println("snelheid= "+snelheid);
				}
				dir_x=1; 
				dir_y=-1;
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				}
			if((x>750)&(x<780)){ //Kaats op zijkant van het veld
			dir_x=-1;
			dir_y=+1;
			afw_x=(int) (2* Math.random()+1);
			afw_y=(int) (2* Math.random()+1);
			}
		}
		
		
		
		if ((dir_x==-1) & (dir_y==-1)){ //Bal beweegt van rechtsonder naar linksboven
			y=y-afw_y;
			x=x-afw_x;
			if(((x<(xpos_1-50))||(x>(xpos_1+50)))&((y<10)&(y>5))){ //Player 1 mist de bal
				System.out.println("Player 1 mist de bal");	
				player1_mis=true;
			}
			if (((x>(xpos_1-10))&(x<(xpos_1+50)))&((y>10)&(y<20))){ //Player 1 raakt de bal op de linkerkant
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				dir_x=-1; 
				dir_y=1;
				if (((x>(xpos_1-10))&(x<(xpos_1+10)))&((y>10)&(y<10))){ //Snelheid verhoogt bij kaats op uiteinde
					snelheid = 5;
					System.out.println("snelheid= "+snelheid);
				}
			}
			if (((x>(xpos_1+50))&(x<(xpos_1+100)))&((y>10)&(y<20))){ //Player 1 raakt de bal op de rechterkant
				if (((x>(xpos_1+80))&(x<(xpos_1+100)))&((y>10)&(y<10))){ //Snelheid verhoogt bij kaats op uiteinde
					snelheid = 5;
					System.out.println("snelheid= "+snelheid);
				}
				dir_x=1; 
				dir_y=1;
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				}
			if((x>5)&(x<10)){ //Kaats op zijkant van het veld
			dir_x=1;
			dir_y=-1;
			afw_x=(int) (2* Math.random()+1);
			afw_y=(int) (2* Math.random()+1);
			}
		}
		
		
		
		if ((dir_x==-1) & (dir_y==1)){ //Bal beweegt van rechtsboven naar linksonderen 
			y=y+afw_y;;
			x=x-afw_x;;
			if(((x<(xpos_2-50))||(x>(xpos_2+50)))&((y<780)&(y>=775))){ //Player 2 mist de bal    
				System.out.println("Player 2 mist de bal");	
				player2_mis=true;	
			}
			if (((x>(xpos_2-10))&(x<(xpos_2+50)))&((y>760)&(y<780))){ //Player 2 raakt de bal op de linkerkant
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				dir_x=-1; 
				dir_y=-1;
				if (((x>(xpos_2-10))&(x<(xpos_2+10)))&((y>10)&(y<10))){ //Snelheid verhoogt bij kaats op uiteinde
					snelheid = 5;
					System.out.println("snelheid= "+snelheid);
				}
			}
			if (((x>(xpos_2+50))&(x<(xpos_2+100)))&((y>760)&(y<780))){ //Player 2 raakt de bal op de rechterkant 
				if (((x>(xpos_2+80))&(x<(xpos_2+100)))&((y>760)&(y<780))){ //Snelheid verhoogt bij kaats op uiteinde
					snelheid = 5;
					System.out.println("snelheid= "+snelheid);
				}
				dir_x=1; 
				dir_y=-1;
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				}
			if((x>5)&(x<10)){ //Kaats op zijkant van het veld
			dir_x=1;
			dir_y=1;
			afw_x=(int) (2* Math.random()+1);
			afw_y=(int) (2* Math.random()+1);
			}
		}
		
		if ((y<780)&(y>=775)){ // Compensatie voor de zwarte zijblokjes, mag weg indien zwarte blokjes niet getekend zijn                      
			System.out.println("GAME OVER ALGEMEEN");
		}
		if ((y<10)&(y>=5)){  // Compensatie voor de zwarte zijblokjes, mag weg indien zwarte blokjes niet getekend zijn                         
			System.out.println("GAME OVER ALGEMEEN");
		}
		
		slaap(snelheid);
		ypos_thread=y+"";	
		xpos_thread=x+"";	
	}

	} // einde van de run()
	public String getXpos_thread(){
		return xpos_thread.toString();
	}
	public String getYpos_thread(){
		return ypos_thread.toString();
	}
	public static void slaap (int mSec){		 
  		try {
  			Thread.currentThread().sleep(mSec); 
  		} catch (InterruptedException e){ }
  	} 
	
}